package com.sports.demo.utils;


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Collection;

public class AssertUtils {

    public static void notBlank(String value, String msg) {
        fail(hasText(value), msg);
    }

    public static void isBlank(String value, String msg) {
        fail(!hasText(value), msg);
    }

    public static void notNull(Object value, String msg) {
        fail(value != null, msg);
    }

    public static void isNull(Object value, String msg) {
        fail(value == null, msg);
    }

    public static void notEmpty(Collection collection, String msg) {
        fail(collection != null || collection.size() > 0, msg);
    }
//
//    public <T> static void isContains(Collection<T> collation, T t, String msg) {
//        fail(collation.contains(t), msg);
//    }

    public static void isEquals(String value1, String value2, String msg) {
        fail(value1.equals(value2), msg);
    }

    public static void isEquals(Object value1, Object value2, String msg) {
        fail(value1.equals(value2), msg);
    }

    public static void notEquals(Object value1, Object value2, String msg) {
        fail(!value1.equals(value2), msg);
    }

    public static void isGt(long value1, long value2, String msg) {
        fail(value1 > value2, msg);
    }

    public static void isLt(long value1, long value2, String msg) {
        fail(value1 < value2, msg);
    }

    public static void notLt(long value1, long value2, String msg) {
        fail(value1 >= value2, msg);
    }

    public static void notLt(LocalDate value1, LocalDate value2, String msg) {
        fail(value1.isAfter(value2), msg);
    }

    public static void notLt(LocalDateTime value1, LocalDateTime value2, String msg) {
        fail(value1.isAfter(value2), msg);
    }

    public static void isFalse(boolean success, String msg) {
        fail(!success, msg);
    }

    public static void isTrue(boolean success, String msg) {
        fail(success, msg);
    }

    private static boolean hasText(String value) {
        return value != null && value.trim().length() > 0;
    }

    public static void fail(boolean success, String msg) {
        if (!success) {
            throw new AssertException(msg);
        }
    }

}
